﻿//void CountTree(struct TreeNode* root, int* x) {
//    if (!root) {
//        return;
//    }
//    if (!root->left && !root->right) {
//        (*x) += root->val;
//        return;
//    }
//    CountTree(root->left, x);
//    CountTree(root->right, x);
//}
//void Delete(struct TreeNode* root) {
//    if (!root) {
//        return;
//    }
//    if (root->right && (!root->right->left && !root->right->right)) {
//        root->right = 0;
//    }
//    Delete(root->left);
//    Delete(root->right);
//}
//int sumOfLeftLeaves(struct TreeNode* root) {
//    if (!root) {
//        return 0;
//    }
//    Delete(root);
//    int count = 0;
//    CountTree(root, &count);
//    return count;
//}

//二叉树的平衡点
//typedef struct TreeNode TreeNode;
//int High(TreeNode* root) {
//    if (!root) {
//        return 0;
//    }
//    int lefthigh = High(root->left);
//    int righthigh = High(root->right);
//    return (lefthigh > righthigh) ? (lefthigh + 1) : (righthigh + 1);
//}
//bool isBalanced(struct TreeNode* root) {
//    if (!root) {
//        return true;
//    }
//    int left = High(root->left);
//    int right = High(root->right);
//    if (left - right > 1 || right - left > 1) {
//        return false;
//    }
//    return isBalanced(root->left) && isBalanced(root->right);
//}

//#include <iostream>
//using namespace std;
//int main() {
//    long long n = 0, m = 0;
//    long long x = 0, y = 0;
//    cin >> n >> m;
//    for (int i = n, j = m; i >= 1 && j >= 1; j--, i--) {
//        x += j * i;
//    }
//    y = m * (m + 1) * n * (n + 1) / 4 - x;
//    cout << x << " " << y << endl;
//    return 0;
//}